﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;

namespace Sln0315
{
    class Program
    {
        static void Main(string[] args)
        {
            Bird b1 = new Bird();
            b1.Fly();
            Flyable b2 = b1;
            b2.Fly();
            b1.Walk();

            Runnable r1 = b1;
            r1.Walk();
            //Person p1 = new Chinese();

            IEnumerable c;
            object obj1 = new Bird();
            if (obj1 is Runnable)
            {
                Console.WriteLine("可以飞");
                Runnable r2 = (Runnable)obj1;
                r2.Walk();

                Runnable r3 = obj1 as Runnable;
                r3.Walk();
            }

            using (Bird b5 = new Bird())//实现了IDisposable接口的类可以用using进行资源的管理
            {
            }
            Console.Read();
        }
    }

    public interface Runnable
    {
        void Walk();
    }

    public interface Flyable
    {
       void Fly();
       int Age { get; set; }//因为属性的本质是方法，所以接口中可以定义属性
       //相当于定义了set_Age、get_Age两个抽象的方法
       //void set_Age(int value);
       //int get_Age();
       //int _age;//接口里面不能定义字段
       //private void H1();//为什么不能用private，public，
       //因为如果能private，那么这个方法只有自己能调用，然后自己又实现不了代码，木有意义
    }

    //一个类可以实现多个接口。而一个类只能有一个父类
    //接口中的成员不能有访问级别修饰（public、private等）
    public class Bird : Flyable, Runnable,IDisposable//"实现接口"，“继承类”
    {

        public void Fly()
        {
            Console.Write("小鸟飞");
        }

        public void Walk()
        {
            Console.WriteLine("蹦跶的");
        }

        #region Flyable 成员

        private int age;
        public int Age
        {
            get;
            set;
            //get
            //{
            //    return age;
            //}
            //set
            //{
            //    this.age = value;
            //}
        }

        #endregion

        #region IDisposable 成员

        public void Dispose()
        {
            Console.WriteLine("啊，我死了！！！");
        }

        #endregion
    }
}
